package br.com.athenas.servico.impl;

import java.rmi.RemoteException;
import java.rmi.server.UnicastRemoteObject;
import java.util.Date;
import java.util.List;

import br.com.athenas.dominio.Pacote;
import br.com.athenas.dominio.ValoresTipo;
import br.com.athenas.servico.ColetaSensores;
import br.com.athenas.servico.arq.GerenciandorBeans;
import br.com.gadje.arquitetura.util.SpringUtils;
import br.com.gadje.dominiopersistencia.dao.TipoDadoUsuarioDAO;
import br.com.gadje.dominiopersistencia.dao.UsuarioDispositivoDAO;
import br.com.gadje.dominiopersistencia.modelo.HistoricoDado;
import br.com.gadje.dominiopersistencia.modelo.TipoDadoUsuario;
import br.com.gadje.dominiopersistencia.modelo.UsuarioDispositivo;

/**
 * Implementa a coleta de dados dos sensores no lado do servidor.
 * @author Joilson-Abrantes
 *
 */
public class ColetaSensoresImpl extends UnicastRemoteObject implements ColetaSensores{

	private boolean iniciadoSessionFactory = false;
	
	public ColetaSensoresImpl() throws RemoteException {
		super();
	}

	public boolean salvarInformacoesSensores(Pacote pacote)
			throws RemoteException {
		
		if (!iniciadoSessionFactory) {
			GerenciandorBeans.iniciadoSessionFactory();
			iniciadoSessionFactory = true;
		}
		
		try {
			UsuarioDispositivoDAO usuarioDao = (UsuarioDispositivoDAO) SpringUtils.getBean("usuarioDispositivoDAO");
			List<UsuarioDispositivo> usuDis =   usuarioDao.buscarUsuarioDispositivoPorDispositivo(pacote.getNumeroSerie());
			
			if (usuDis != null && !usuDis.isEmpty() && pacote.getValoresTipo() != null){
				TipoDadoUsuarioDAO tipoDadoUsuarioDao = (TipoDadoUsuarioDAO) SpringUtils.getBean("tipoDadoUsuarioDAO");
				for (ValoresTipo v : pacote.getValoresTipo()){
					
					TipoDadoUsuario tipodadoUsuario = tipoDadoUsuarioDao.buscarTipoDadoUsuario(usuDis.get(0).getId(), v.getTipo());
					HistoricoDado h = new HistoricoDado();
					h.setTipoDadoUsuario(tipodadoUsuario);
					h.setValor(v.getValor());
					h.setTempo( new Date(v.getTempo()));
					tipoDadoUsuarioDao.inserir(h);
					tipoDadoUsuarioDao.enviarDadosBanco();
				}
				
			}
		
			
			
		} catch (Exception e) {
			e.printStackTrace();
		}
		
		return true;
	}
}
